package controlling;

import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Exercise10 {

  public static void main(String[] args) {

    Vampire.search();

  }

}

class Vampire {

  public static void search() {

    // num1和num2是因子，sum是他们的乘积，定义为String用于比较

    String num1 = null;
    String num2 = null;
    String sum = null;

    // arr1和arr2用于排序后的String数组比较（即因子和乘积的数字是否相同）
    String[] arr1 = null;
    String[] arr2 = null;

    // precondition：每个吸血鬼数字的因子只会出现一对（此说法未百分百证实）
    // 每个数字作为map的key，2个因子构成的字符串作为value
    TreeMap<String, String> map = new TreeMap<String, String>();

    for (int i = 11; i < 100; i++) {

      //内循环j的范围是1000/i（最低为11） ～ 9999/i（最高为99）
      for (int j = (1000 / i > 11) ? 1000 / i : 11; j < (9999 / i <= 99 ? 9999 / i
          : 99); j++) {

        //按照题目要求排除2个因子都以0结尾的情况
        if (i % 10 == 0 && j % 10 == 0)
          continue;

        //把数字转换为String用于构建String数组
        num1 = String.valueOf(i);
        num2 = String.valueOf(j);
        sum = String.valueOf(i * j);

        //构建String数组用于排序
        arr1 = (num1 + num2).split("");
        arr2 = sum.split("");

        //排序
        Arrays.sort(arr1);
        Arrays.sort(arr2);

        //排序后比较，相同则以吸血鬼数字为key放入map中并打印（可能出现重复，因子位置互换）
        if (Arrays.equals(arr1, arr2)) {
          System.out.println(num1 + " * " + num2 + " = " + sum);
          map.put(sum, " = " + num1 + " * " + num2);
        }

      }
    }

    System.out.println("---------------------------");

    //遍历map，按格式打印结果（不会出现重复，因为key是唯一的，value值会被覆盖）
    Set<Map.Entry<String, String>> set = map.entrySet();
    for (Iterator<Map.Entry<String, String>> iterator = set.iterator(); iterator
        .hasNext();) {

      Map.Entry<String, String> entry = iterator.next();
      System.out.println(entry.getKey() + " = " + entry.getValue());

    }

  }

}
